package builtin

import "fmt"

func Append() {
	s1 := []int{1, 2, 3}
	// 原切片s1不变  append后生成一个新切片i
	i := append(s1, 4)
	fmt.Printf("i: %v\n", i)

	s2 := []int{7, 8, 9}
	i2 := append(s1, s2...)
	fmt.Printf("i2: %v\n", i2)
}

func Len() {
	u := "hello golang"
	fmt.Printf("len(u): %v\n", len(u))

	i := []int{1, 2, 3}
	fmt.Printf("len(i): %v\n", len(i))
}

func Print() {
	name := "tom"
	age := 20
	print(name, " ", age, "\n")
	fmt.Println("---------------")
	println(name, " ", age)
}

func Panic() {
	defer fmt.Println("panic异常后执行")
	panic("panic错误")
	fmt.Println("end")
}

/*
new和make区别：

make只能用来分配及初始化类型为slice，map，chan的数据；new可以分配任意类型的数据
new分配返回的是指针，即类型*T；make返回引用，即T；
new分配的空间被清零，make分配后，会进行初始化。
*/

func New() {
	b := new(bool)
	fmt.Println(*b)
	i := new(int)
	fmt.Println(*i)
	s := new(string)
	fmt.Println(*s)
}

func Make() {
	var p *[]int = new([]int)
	var v []int = make([]int, 100)
	fmt.Println(p)
	fmt.Println(v)

	*p = make([]int, 100, 100)
	fmt.Println(p)
}
